package com.peas.platform.module.icims.budget.apply.controller.vo;

import java.math.*;
import com.peas.platform.common.core.annotation.Comment;
import com.peas.platform.common.core.vo.BaseVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.*;

@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel("一上预算")
public class BudgetOneVo extends BaseVo {

    // （二级项目表）外键
    @Comment(value = "二级项目ID")
    @ApiModelProperty(value = "二级项目ID")
    private Long projectTwoId;

    @Comment(value = "项目编制编码")
    @ApiModelProperty(value = "项目编制编码")
    @Size(max = 50, message = "项目编制编码不能超过50个字符")
    private String code;

    // 基本信息
    @Comment(value = "项目编制名称")
    @ApiModelProperty(value = "项目编制名称")
    @Size(max = 100, message = "项目编制名称不能超过100个字符")
    private String name;

    // 选择框
    @Comment(value = "存续状态", dictType = "BudgetProjectViability")
    @ApiModelProperty(value = "存续状态", notes = "字典取值:BudgetProjectViability")
    @Size(max = 20, message = "存续状态不能超过20个字符")
    private String viability;

    // 选择框
    @Comment(value = "项目来源", dictType = "BudgetProjectSource")
    @ApiModelProperty(value = "项目来源", notes = "字典取值:BudgetProjectSource")
    @Size(max = 20, message = "项目来源不能超过20个字符")
    private String source;

    // 新增项目、持续项目、跨年度项目
    @Comment(value = "项目属性", dictType = "BudgetProjectAttribute")
    @ApiModelProperty(value = "项目属性", notes = "字典取值:BudgetProjectAttribute")
    @Size(max = 20, message = "项目属性不能超过20个字符")
    private String attribute;

    @Comment(value = "申请财政总额")
    @ApiModelProperty(value = "申请财政总额")
    private BigDecimal totalFund;

    @Comment(value = "社会投入资金")
    @ApiModelProperty(value = "社会投入资金")
    private BigDecimal putinFund;

    @Comment(value = "当年资金")
    @ApiModelProperty(value = "当年资金")
    private BigDecimal currFund;

    @Comment(value = "资金性质")
    @ApiModelProperty(value = "资金性质")
    @Size(max = 20, message = "资金性质不能超过20个字符")
    private String fundType;

    // （单位表）外键
    @Comment(value = "用款单位ID")
    @ApiModelProperty(value = "用款单位ID")
    private Long useGovId;

    // （单位表）外键
    @Comment(value = "申报单位ID")
    @ApiModelProperty(value = "申报单位ID")
    private Long applyGovId;

    @Comment(value = "上一年项目预算安排情况")
    @ApiModelProperty(value = "上一年项目预算安排情况")
    @Size(max = 200, message = "上一年项目预算安排情况不能超过200个字符")
    private String previousArrange;

    // 【预算主管部门】
    @Comment(value = "主管部门ID")
    @ApiModelProperty(value = "主管部门ID")
    private Long managerOrgId;

    @Comment(value = "主管部门联系人")
    @ApiModelProperty(value = "主管部门联系人")
    @Size(max = 20, message = "主管部门联系人不能超过20个字符")
    private String managerName;

    @Comment(value = "主管部门联系电话")
    @ApiModelProperty(value = "主管部门联系电话")
    @Size(max = 20, message = "主管部门联系电话不能超过20个字符")
    private String managerUserContact;

    // （单位表）外键
    @Comment(value = "项目实施单位ID")
    @ApiModelProperty(value = "项目实施单位ID")
    private Long workGovId;

    // （用户表）外键
    @Comment(value = "项目负责人ID")
    @ApiModelProperty(value = "项目负责人ID")
    private Long workUserId;

    @Comment(value = "项目负责人联系方式")
    @ApiModelProperty(value = "项目负责人联系方式")
    @Size(max = 20, message = "项目负责人联系方式不能超过20个字符")
    private String workUserContact;

    // 0保存、1提交审批、2审批通过、3审批驳回、4撤回
    @Comment(value = "状态")
    @ApiModelProperty(value = "状态")
    @Size(max = 20, message = "状态不能超过20个字符")
    private String state;

    @Comment(value = "起始年度")
    @ApiModelProperty(value = "起始年度")
    @Size(max = 4, message = "起始年度不能超过4个字符")
    private String startTime;

    @Comment(value = "终止年度")
    @ApiModelProperty(value = "终止年度")
    @Size(max = 4, message = "终止年度不能超过4个字符")
    private String endTime;

    @Comment(value = "项目概述")
    @ApiModelProperty(value = "项目概述")
    private String summarize;

    @Comment(value = "设立依据及申报理由")
    @ApiModelProperty(value = "设立依据及申报理由")
    private String reason;

    @Comment(value = "是否债券可用项目", dictType = "BudgetProjectDebenture")
    @ApiModelProperty(value = "是否债券可用项目", notes = "字典取值:BudgetProjectDebenture")
    @Size(max = 20, message = "是否债券可用项目不能超过20个字符")
    private String isDebenture;

    @Comment(value = "是否科研项目", enumType = "CommonYesNo")
    @ApiModelProperty(value = "是否科研项目", notes = "枚举取值:CommonYesNo")
    @Size(max = 20, message = "是否科研项目不能超过20个字符")
    private String isScientific;

    @Comment(value = "是否基建项目", enumType = "CommonYesNo")
    @ApiModelProperty(value = "是否基建项目", notes = "枚举取值:CommonYesNo")
    @Size(max = 20, message = "是否基建项目不能超过20个字符")
    private String isConstruction;

    // 选择框
    @Comment(value = "基建立项情况", dictType = "BudgetProjectConstruction")
    @ApiModelProperty(value = "基建立项情况", notes = "字典取值:BudgetProjectConstruction")
    @Size(max = 20, message = "基建立项情况不能超过20个字符")
    private String constructionDesc;

    @Comment(value = "是否代建项目", enumType = "CommonYesNo")
    @ApiModelProperty(value = "是否代建项目", notes = "枚举取值:CommonYesNo")
    @Size(max = 20, message = "是否代建项目不能超过20个字符")
    private String isAgent;

    // （单位表）外键
    @Comment(value = "代建单位ID")
    @ApiModelProperty(value = "代建单位ID")
    private Long agentGovId;

    // 1是，0否
    @Comment(value = "是否政府采购", enumType = "CommonYesNo")
    @ApiModelProperty(value = "是否政府采购", notes = "枚举取值:CommonYesNo")
    @Size(max = 20, message = "是否政府采购不能超过20个字符")
    private String isGovernmentPurchase;

    // 绩效目标总目标
    @Comment(value = "项目绩效总目标")
    @ApiModelProperty(value = "项目绩效总目标")
    private String targetAll;

    // 绩效目标本年度目标
    @Comment(value = "项目绩效本年度目标")
    @ApiModelProperty(value = "项目绩效本年度目标")
    private String targetCurrent;

    // 一下控制时写入（完成状态）
    @Comment(value = "一上申请金额")
    @ApiModelProperty(value = "一上申请金额")
    private BigDecimal applyOneFund;

    @Comment(value = "一下控制金额")
    @ApiModelProperty(value = "一下控制金额")
    private BigDecimal approveOneFund;

}
